package com.ztf.reflection;

import java.lang.reflect.Method;

/**
 * 演示了Reflection API的基本作用，它读取命令行参数指定的类名，然后打印这个类所具有的方法信息。
 * */
public class DumpMethods
{
    public static void main(String[] args) throws Exception //在方法后加上这句，异常就消失了
    {
        //使用Class类的静态方法获得字符串所标识的类的class对象
        Class<?> classType = Class.forName("java.lang.String");//在此处传入字符串指定类名，所以参数获取可以是一个运行期的行为，可以用args[0]

        Class<?> classType1 = String.class;//使用类的.class语法
        /**
         * 使用对象的getClass()方法
         * getClass()方法定义在Object类中，不是静态方法，需要通过对象来调用，并且它声明为final，表明不能被子类所覆写
         * */
        String str = "aa";
        Class<?> classType2 = str.getClass();
        //如果调用该Class对象的getName()方法，则输出完整类名，不加class
        System.out.println("===="+classType2.getName());
        //class 完整类名
        System.out.println("====="+classType2.getClasses());
        //返回class对象所对应的类或接口中，所声明的所有方法的数组（包括私有方法）
        Method[] methods = classType.getDeclaredMethods();

        //遍历输出所有方法声明
        for(Method method : methods)
        {
            System.out.println(method);
        }
    }

}